﻿//LatencyManager.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo.Latency
{
	using System;

	using StockSharp.BusinessEntities;

	/// <summary>
	/// Менеджер менеджера расчета задержки регистрации заявок.
	/// </summary>
	public class LatencyManager : ILatencyManager
	{
		/// <summary>
		/// Создать <see cref="LatencyManager"/>
		/// </summary>
		public LatencyManager()
		{
		}

		/// <summary>
		/// Суммарное значение задержки регистрации по всем заявкам.
		/// </summary>
		public virtual TimeSpan LatencyRegistration { get; private set; }

		/// <summary>
		/// Суммарное значение задержки отмены по всем заявкам.
		/// </summary>
		public virtual TimeSpan LatencyCancellation { get; private set; }

		/// <summary>
		/// Обнулить расчеты.
		/// </summary>
		public virtual void Reset()
		{
			LatencyRegistration = LatencyCancellation = TimeSpan.Zero;
		}

		/// <summary>
		/// Обработать задержку регистрации заявки <see cref="Order.LatencyRegistration"/>.
		/// </summary>
		/// <param name="order">Заявка.</param>
		/// <returns>Задержка регистрации заявки.</returns>
		public TimeSpan ProcessNewOrder(Order order)
		{
			if (order == null)
				throw new ArgumentNullException("order");

			var latency = order.LatencyRegistration;
			LatencyRegistration += latency;
			return latency;
		}

		/// <summary>
		/// Обработать задержку отмены заявки <see cref="Order.LatencyCancellation"/>.
		/// </summary>
		/// <param name="order">Заявка.</param>
		/// <returns>Задержка отмены заявки.</returns>
		public TimeSpan ProcessChangedOrder(Order order)
		{
			if (order == null)
				throw new ArgumentNullException("order");

			var latency = order.LatencyCancellation;
			LatencyCancellation += latency;
			return latency;
		}
	}
}